import { IPSDataEntityObject } from '../ipsdata-entity-object';
import { IPSDEField } from '../defield/ipsdefield';
import { IPSDEDataSet } from '../ds/ipsdedata-set';
import { IPSDENotifyTarget } from './ipsdenotify-target';
import { IPSSysMsgQueue } from '../../msg/ipssys-msg-queue';
import { IPSSysMsgTempl } from '../../msg/ipssys-msg-templ';
import { IPSSysSFPlugin } from '../../res/ipssys-sfplugin';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDENotify
 */
export interface IPSDENotify extends IPSDataEntityObject {
  /**
   * 开始时间值存储属性
   *
   * @type {IPSDEField}
   */
  getBeginTimePSDEField(): IPSDEField | null;

  /**
   * 开始时间值存储属性
   *
   * @type {IPSDEField}
   */
  get beginTimePSDEField(): IPSDEField | null;

  /**
   * 开始时间值存储属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getBeginTimePSDEFieldMust(): IPSDEField;

  /**
   * 通知检查间隔
   * @type {number}
   * @default 0
   */
  checkTimer: number;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 自定义条件
   * @type {string}
   */
  customCond: string;

  /**
   * 结束时间值存储属性
   *
   * @type {IPSDEField}
   */
  getEndTimePSDEField(): IPSDEField | null;

  /**
   * 结束时间值存储属性
   *
   * @type {IPSDEField}
   */
  get endTimePSDEField(): IPSDEField | null;

  /**
   * 结束时间值存储属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getEndTimePSDEFieldMust(): IPSDEField;

  /**
   * 发送通知类型
   * @description 值模式 [流程处理通知消息类型] {1：系统消息、 2：电子邮件、 4：手机短信、 8：MSN消息、 16：检务通消息、 32：微信、 64：钉钉、 128：企业微信、 256：用户自定义、 512：用户自定义2 }
   * @type {( number | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512)}
   */
  msgType: number | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512;

  /**
   * 延后通知间隔
   * @type {number}
   * @default 0
   */
  notifyEnd: number;

  /**
   * 提前通知间隔
   * @type {number}
   * @default 0
   */
  notifyStart: number;

  /**
   * 通知标记
   * @type {string}
   */
  notifyTag: string;

  /**
   * 通知标记2
   * @type {string}
   */
  notifyTag2: string;

  /**
   * 数据集
   *
   * @type {IPSDEDataSet}
   */
  getPSDEDataSet(): IPSDEDataSet | null;

  /**
   * 数据集
   *
   * @type {IPSDEDataSet}
   */
  get psDEDataSet(): IPSDEDataSet | null;

  /**
   * 数据集（必须存在）
   *
   * @type {IPSDEDataSet}
   */
  getPSDEDataSetMust(): IPSDEDataSet;

  /**
   * 通知目标集合
   *
   * @type {IPSDENotifyTarget[]}
   */
  getPSDENotifyTargets(): IPSDENotifyTarget[] | null;

  /**
   * 通知目标集合
   *
   * @type {IPSDENotifyTarget[]}
   */
  get psDENotifyTargets(): IPSDENotifyTarget[] | null;

  findPSDENotifyTarget(objKey: any): IPSDENotifyTarget | null;

  /**
   * 系统消息队列
   *
   * @type {IPSSysMsgQueue}
   */
  getPSSysMsgQueue(): IPSSysMsgQueue | null;

  /**
   * 系统消息队列
   *
   * @type {IPSSysMsgQueue}
   */
  get psSysMsgQueue(): IPSSysMsgQueue | null;

  /**
   * 系统消息队列（必须存在）
   *
   * @type {IPSSysMsgQueue}
   */
  getPSSysMsgQueueMust(): IPSSysMsgQueue;

  /**
   * 系统消息模板
   *
   * @type {IPSSysMsgTempl}
   */
  getPSSysMsgTempl(): IPSSysMsgTempl | null;

  /**
   * 系统消息模板
   *
   * @type {IPSSysMsgTempl}
   */
  get psSysMsgTempl(): IPSSysMsgTempl | null;

  /**
   * 系统消息模板（必须存在）
   *
   * @type {IPSSysMsgTempl}
   */
  getPSSysMsgTemplMust(): IPSSysMsgTempl;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 附加任务模式
   * @description 值模式 [实体通知任务模式] {0：无任务、 1：待办任务 }
   * @type {( number | 0 | 1)}
   */
  taskMode: number | 0 | 1;

  /**
   * 定时触发模式
   * @type {boolean}
   * @default false
   */
  timerMode: boolean;
}
